home *** CD-ROM | disk | FTP | other *** search
- ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬
- (MATCH05.DOC)
- é¿ïCèyé▓é¡éτé¡âvâìâOâëâ~âôâOôⁿûσ ö╘èOò╥ üuâGâLâXâpü[âgâVâXâeâÇé╠ì∞ɼüv
- ìLêΣü@É╜
- ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬
-
- ü¢âpâ^ü[âôâ}âbâ`âôâOé⌐éτâGâLâXâpü[âgâVâXâeâÇé╓
-
- é╗éΩé┼é═ Prolog é╠ô«ì∞é≡ÄQìlé╔üAè╚ê╒âGâLâXâpü[âgâVâXâeâÇé≡ì∞ɼé╡é▄é╡éσ
-
- éñüBProlog é┼é═üA
-
-
- ÅqîΩ(ê°Éö, ..., ê°Éö).
-
-
- é┼ÄûÄ└é≡ÆΦï`é╡é▄é╡é╜é¬üAé▒éΩé≡é╗é╠é▄é▄ Lisp é┼Ä└î╗é╖éΘé╠é═û╩ô|é╚é╠é┼üAâè
-
- âXâgé≡Ägé┴é─ăé╠éµéñé╔ò\é╡é▄é╖üB
-
-
- (ÅqîΩ ê°Éö ... ê°Éö)
-
-
- é▒é╠é┘éñé¬âpâ^ü[âôâ}âbâ`âôâOé≡é╗é╠é▄é▄ôKùpé┼é½éΘé╠é┼ôsìçé¬éµéóé╠é┼é╖üBÅq
-
- îΩé═âpâ^ü[âôò╧Éöê╚èOé╠âVâôâ{âïé┼ò\é╡é▄é╖üBê°Éöé═üAâVâôâ{âïüAâpâ^ü[âôò╧ÉöüA
-
- ÉöÆlüAâèâXâgüAé╞é╡é▄é╖üBìíîπüAâpâ^ü[âôò╧Éöé≡üuò╧Éöüvé╞Åæé¡é▒é╞é╔é╡é▄é╖üB
-
-
- ăé╔ïKæÑé┼é╖é¬üAProlog é┼é═
-
-
- head :- goal1, goal2, ... goalN.
-
-
- é╞ò\é╡é▄é╡é╜é¬üAé▒éΩéαÆPÅâé╚âèâXâgé┼ò\é╖é▒é╞é╔é╡é▄é╖üB
-
-
- (head goal1 goal2 ... goalN)
-
-
- âèâXâgé╠ɵô¬é¬ô¬òöé╞é╚éΦüAÄcéΦé¬æ╠òöé╞é╚éΦé▄é╖üBé╜é╛é╡üAé▒é╠é▄é▄é┼é═ÄûÄ└
-
- é╞ïKæÑé╠ïµò╩é¬é┬é⌐é╚é¡é╚éΘé╠é┼üA(head) é╠é▌é╠ïKæÑé≡ÄûÄ└é╞é╖éΘé▒é╞é╔é╡é▄
-
- é╡éσéñüBé┬é▄éΦüA
-
-
- ((ÅqîΩ ê°Éö ... ê°Éö))
-
-
- é┼ÄûÄ└é≡ò\é╡üAăé╠
-
-
- ((ÅqîΩ ê°Éö ... ê°Éö) (ÅqîΩ ê°Éö ... ê°Éö) ... )
-
-
- é¬ïKæÑé≡ò\é╖é▒é╞é╔é╡é▄é╖üB
-
- ÄûÄ└é╞ïKæÑé═è╚ÆPé╔ĵéΦÅoé╣éΘéµéñé╔üAô¬òöé╠ÅqîΩé╠æ«É½âèâXâgé╔èiö[é╖éΘé▒
-
- é╞é╔é╡é▄é╖üBæ«É½û╝é═ RULE é╞é╡é▄é╖üB
-
-
- ü¢ò╧Éöé╠è╟ù¥ò√û@
-
- ăé╔üAò╧Éöé╔é┬éóé─Å┌é╡é¡îƒôóé╡é─é▌é▄é╖üBé▒é▒é┼Æìê╙é╡é─éαéτéóé╜éóé╠é¬ò╧
-
- Éöé╠ùLî°ö═ê═é┼é╖üBProlog é╠ÅΩìçüAò╧Éöé═ô»é╢É▀ôαé┼é╠é▌ùLî°é┼é╖üBé┬é▄éΦüA
-
- ï╟Åèò╧Éöé╞é╡é─ê╡éφéΩéΘé╠é┼é╖üBé▒é╠é╜é▀üAProlog é┼é═ì─ïAî─é╤Åoé╡éαë┬ö\é┼
-
- é╖üBé╜é╞éªé╬üAɵé┘é╟é╠Ä┐ûΓ ?-ö≥é╘(Y). é╠ò╧Éöé≡ X é╔ò╧éªé─é▌é▄é╖üB
-
-
- ?-ö≥é╘(X).
- äá
- äá head é╞â}âbâ`âôâOé╖éΘÉ▀é≡ÆTì⌡é╖éΘ
- ü½
- ö≥é╘(X) :- ö≥ìsï@(X). ò╧Éö X é═é▒é╠É▀ôαé┼é╠é▌ùLî°
-
- É} 15 : Prolog é╠ò╧Éöé═ùLî°ö═ê═é¬É▀é╠Æåé╛é»
-
-
- ïKæÑ ö≥é╘(X) :- ö≥ìsï@(X). é╠ò╧Éö X é═ô»é╢ò╧Éöé┼é╖é¬üAé▒é╠ò╧Éöé╞Ä┐ûΓ ?-
-
- ö≥é╘(X). é╠ X é═üAû╝æOé¬ô»é╢é┼é╖é¬ò╩é╠ò╧Éöé╞é╡é─ê╡éñé╠é┼é╖üBé╡é╜é¬é┴é─üA
-
- ɵé┘é╟é╞ô»é╢éµéñé╔ôÜéªé≡ïüé▀éΘé▒é╞é¬é┼é½é▄é╖üBé▒é╠éµéñé╔üAProlog é┼ìséφ
-
- éΩéΘâpâ^ü[âôâ}âbâ`âôâOé═üAô»é╢û╝æOé┼éáé┴é─éαò╩é╠ò╧Éöé╞é╡é─ê╡éñé╜é▀üAî╡ûº
-
- é╚ê╙ûíé┼é╠âåâjâtâBâPü[âVâçâôé≡òKùvé╞é╡é▄é╣é±üBè╓Éö unify é┼é═üAô»êΩò╧Éö
-
- é╠â`âFâbâNé≡ insidep é┼ìséóé▄é╡é╜é¬üAé▒é╠Åêù¥é═òsùvé╔é╚éΦé▄é╖üB
-
- é╞é▒éδé¬üAéóéóé▒é╞é╛é»é┼é═éáéΦé▄é╣é±üBìíôxé═ò╧Éöé╠è╟ù¥ò√û@é¬ûΓæΦé╔é╚éΘ
-
- é╠é┼é╖üBâXâyâVâââïò╧Éöé≡Ägé┴é╜ò╧Éöé╠è╟ù¥ò√û@é═üAô»é╢âVâôâ{âïé≡ê┘é╚éΘò╧Éö
-
- é╞é╡é─ê╡éñé╠é╔é═ôKé╡é─éóé▄é╣é±üBé╞éóé┴é─üAéóé▄é│éτâåâjâtâBâPü[âVâçâôé≡ò╧
-
- ìXé╖éΘé╠é═û╩ô|é┼é╖é╦üBÄ└é═è╚ÆPé╚ò√û@é¬éáéΘé╠é┼é╖üBé╗éΩé═üAÉ▀é╔éµé┴é─ê┘é╚
-
- éΘâVâôâ{âïé≡Ägùpé╡üAò╧Éöû╝é¬Ådé╚éτé╚éóéµéñé╔é╖éΘé▒é╞é┼é╖üBé▒é╠Åêù¥é≡ÄäÆB
-
- é¬ìséñé╠é┼é═üAé▒éΩé▄é╜û╩ô|é┼é╖é╦üBé╗é▒é┼üAÉ▀é≡æ«É½âèâXâgé╔ôoÿ^é╖éΘÄ₧üAò╧
-
- Éöé≡ÉVé╡éóâVâôâ{âïé╔Æuè╖é╖éΘé▒é╞é╔é╡é▄é╖üB
-
- Lisp é╔é═üAânâbâVâàò\(oblist)é╔ôoÿ^é╡é╚éóé╚éóâVâôâ{âïé≡É╢ɼé╖éΘè╓Éö
-
- gensym é¬éáéΦé▄é╖üB
-
-
- gensym
-
-
- âVâôâ{âïé≡è╟ù¥é╖éΘânâbâVâàò\ oblist é╔ôoÿ^é╣é╕é╔üAâVâôâ{âïé≡ÉVé╡é¡ì∞ɼé╡
-
- é▄é╖üBê≤ÄÜû╝é═ÉVé╡é¡ì∞ɼé│éΩüA'G' é╞é╗é╠éáé╞é╔ 4âPâ^é╠ 10 ÉiÉöé╠ÉöÄÜé¬æ▒
-
- é½é▄é╖üB
-
-
- Lisp > (setq a (gensym))
- #:G0000
-
- Lisp (eq 'G0000 a)
- nil
-
-
- #: é═ oblist é╔ôoÿ^é│éΩé─éóé╚éóé▒é╞é≡Īé╡é▄é╖üBG0000 é═ oblist é╔ôoÿ^é│
-
- éΩé▄é╖é¬üA#:G0000 é═ oblist é╔é═ôoÿ^é│éΩé╚éóé╠é┼üAéQé┬é╠âVâôâ{âïé═ê┘é╚éΦ
-
- é▄é╖üBeq é┼öΣèré╡é─éα nil é╞é╚éΦé▄é╖üB
-
- é▒é╠éµéñé╔üAoblist é╔ôoÿ^é│éΩé─éóé╚éóâVâôâ{âïé═üAé╗éΩê╚æOé╠érÄ«é┼Ägéφ
-
- éΩé─éóéΘâVâôâ{âïé╞ê┘é╚éΘéφé»é┼é╖é⌐éτüAÉ▀ôαé╠ò╧Éöé≡é▒é╠âVâôâ{âïé┼Æué½è╖éª
-
- éΩé╬üAæ╝é╠É▀é┼Ägéñò╧Éöé╞Å╒ô╦é╖éΘé▒é╞é═é╚é¡é╚éΦé▄é╖üBé▄é╜üAâVâôâ{âïû╝é═ëp
-
- æσò╢ÄÜé┼Äné▄é┴é─éóéΘé╠é┼üAò╧Éöû╝é╠Å≡îÅé≡û₧é╜é╡é─éóéΘé╠éαôsìçé¬éµéóé┼é╖é╦üB
-
-
- é╞é▒éδé¬üAÉ▀é╠ò╧Éöé≡ò╧éªéΘé╛é»é┼é═òsÅ\ò¬é╚é╠é┼é╖üBé╞éóéñé╠éαüAì─ïAî─é╤
-
- Åoé╡é¬ìséφéΩéΘé╞üAô»é╢É▀é≡î─é╤Åoé╖éφé»é┼é╖é⌐éτüAé╗é▒é┼ò╧Éöé╠Å╒ô╦é¬ö¡É╢é╖
-
- éΘÅΩìçé¬éáéΘé⌐éτé┼é╖üBé▒éΩé≡ë±ö≡é╖éΘé╜é▀üAâåâjâtâBâPü[âVâçâôé≡ìséñé╞é▒éδ
-
- é┼üAÉ▀é╠ò╧Éöé≡Æué½è╖éªéΘé▒é╞é╔é╡é▄é╖üBé▒é╠ò√û@é╛é╞üAì─ïAî─é╤Åoé╡é¬ìséφéΩ
-
- éΘôxé╔ÉVé╡éóò╧Éöé╔Æué½ò╧éφéΘé╠é┼üAéñé▄é¡ô«ì∞é╡é▄é╖üBîçô_é╞é╡é─üAâåâjâtâB
-
- âPü[âVâçâôé≡ìséñôxé╔ò╧Éöé≡Æuè╖é╖éΘé╠é┼üAÄ└ìsæ¼ôxé¬Æxé¡é╚éΘé▒é╞é┼é╖üBé▄éáüA
-
- Lisp âCâôâ^âvâèâ^é┼ô«é⌐é╖é╠é┼é╖é⌐éτüAéαé╞éαé╞Ä└ìsæ¼ôxé═è·æ╥é╡é─éóé▄é╣é±üB
-
- è╚ÆPé╔ì∞éΩéΘò√û@é≡æIé╤é▄é╡éσéñüB
-
-
- ò╧Éöé≡Æué½è╖éªéΘì∞ï╞é═üAé╗éΩé┘é╟ô∩é╡éóé▒é╞é┼é═éáéΦé▄é╣é±üBLisp é╔é═üA
-
- âèâXâgé╠ùvæfé≡Æué½è╖éªéΘè╓Éöé¬ùpê╙é│éΩé─éóé▄é╖üB
-
-
- subst new old tree
-
- subst-if new test tree
-
- subst-if-not new test tree
-
-
- subst é═âèâXâg tree é╠ old é╔ôÖé╡éó(equal) òöò¬é≡üAnew é╔Æué½è╖éªé╜ÉV
-
- é╡éóâèâXâgé≡ò╘é╡é▄é╖üBsubst é═âèâXâgé╠ì\æóé≡ì─ïAôIé╔é╜é╟éΦüAé╖é╫é─é╠ùvæf
-
- é≡îƒì╕é╡é▄é╖üBî│é╠âèâXâgé═öjë≤é│éΩé▄é╣é±üBsubst-if é═ÅqîΩ test é≡û₧é╜é╖
-
- ùvæfé≡ new é╔Æué½è╖éªüAsubst-if-not é═ÅqîΩ test é≡û₧é╜é│é╚éóùvæfé≡ new
-
- é╔Æué½è╖éªé▄é╖üBè╚ÆPé╚Ägùpùßé≡Īé╡é▄é╡éσéñüB
-
-
- Lisp > (subst 'A 'a '(a b c (a b c (a b c . a))))
- (A b c (A b c (A b c . A)))
-
-
- é╞é▒éδé┼üAÉ▀ôαé┼Ägùpé╖éΘò╧Éöé═êΩé┬é╞é═î└éΦé▄é╣é±üBòíÉöé╠ùvæfé≡êΩôxé╔Æué½
-
- è╖éªéΘè╓Éöé¬ sublis é┼é╖üB
-
-
- sublis a-list tree
-
-
- ÿAæzâèâXâg a-list é╠âLü[é╔ôÖé╡éó tree é╠òöò¬é≡üAâfü[â^é╔Æué½è╖éªé▄é╖üB
-
- sublis é═ subst é≡òíÉöë±Ä└ìsé╡é╜ÅΩìçé╞ô»é╢î°ë╩é¬ô╛éτéΩé▄é╖üBtree é═öjë≤
-
- é│éΩé▄é╣é±üBè╚ÆPé╚Ägùpùßé≡Īé╡é▄é╡éσéñüB
-
-
- Lisp > (sublis '((a . 1) (b . 2)) '(a b c (a b c . a) d . b))
- (1 2 c (1 2 c . 1) d . 2)
-
-
- ò╧Éöé╠Æué½è╖éªé═ sublis é≡Ägéñé╞è╚ÆPé┼é╖üBé▄é╕üAÉ▀ôαé┼ÄgéφéΩé─éóéΘò╧Éö
-
- é≡ÅWé▀é▄é╖üBé▒é╠è╓Éöé≡ collect-variable é╞é╡é▄é╡éσéñüB
-
-
- Lisp > (collect-variable '((foo X Y) (bar1 X) (bar2 Y)))
- (X Y)
-
-
- ăé╔üAé▒é╠ò╧Éöé╞ gensym é┼É╢ɼé╖éΘâVâôâ{âïé╠ÿAæzâèâXâgé≡ì∞éΦé▄é╖üBé▒éΩé═
-
- mapcar é≡Ägéªé╬è╚ÆPé┼é╖üB
-
-
- Lisp > (mapcar #'(lambda (x) (cons x (gensym))) '(X Y))
- ((X . #:G0000) (Y . #:G0001))
-
-
- îπé═üAé▒é╠ÿAæzâèâXâgé╞É▀é≡ sublis é╔ôné╣é╬éóéóé╠é┼é╖üB
-
-
- Lisp > (sublis '((X . #:G0000) (Y . #:G0001))
- '((foo X Y) (bar1 X) (bar2 Y)))
- ((foo #:G0000 #:G0001) (bar1 #:G0000) (bar2 #:G0001))
-
-
- è╚ÆPé┼é╖é╦üBÄ└ì█é╠âvâìâOâëâÇé═É▀é≡ÆΦï`é╖éΘé╞é▒éδé┼ì∞éΦé▄é╖üB
-
-
- ü¢âoâbâNâgâëâbâNé╠è╟ù¥
-
- ìíôxé═âGâLâXâpü[âgâVâXâeâÇé╠ô«ì∞é╔é┬éóé─ìléªé─é▌é▄é╖üBProlog é╠ÅΩìçüA
-
- ô«ì∞é═ Box âéâfâïé╞éóéñî`Ä«é┼ò\é╖é▒é╞é¬é┼é½é▄é╖üB
-
-
- Call ü¿äíäƒäƒäƒäƒäƒäƒäƒäóü¿ Exit
- äá äá
- äá Ä└ìsÆåé╠É▀ äá
- äá äá
- Fail ü⌐äñäƒäƒäƒäƒäƒäƒäƒäúü⌐ Redo
-
- Call : ïNô«
- Exit : Ä╕ös
- Redo : ì─ÄÄìs
- Fail : Ä╕ös
-
- É} 16 : Box âéâfâï
-
-
- Box âéâfâïé═üAÄ└ìsÆåé╠É▀é≡â{âbâNâXé╞é╡üAé╗é╠Å≤æ╘é≡ Call, Redo, Exit, Fail
-
- é┼ò\é╡é▄é╖üBÉ▀é¬Åëé▀é─Ä└ìsé│éΩéΘé▒é╞é≡ Call é╞éóéóé▄é╖üBé▒é╠Ä₧é╔â{âbâNâX
-
- é¬ì∞éτéΩé▄é╖üBɼî≈é╡é╜ÅΩìçé≡ Exit é╞éóéóüAì─ÄÄìsé╡é╜ÅΩìçé≡ Redo é╞éóéóé▄
-
- é╖üBÄ╕ösé╡é╜ÅΩìçé≡ Fail é╞éóéóüAé▒é╠Ä₧â{âbâNâXé¬öjë≤é│éΩé▄é╖üBé▒é╠â{âbâN
-
- âXé╔òKùvé╚Åεò±é≡ò█æ╢é╡é─é¿é¡é▒é╞é┼üAâoâbâNâgâëâbâNé¬ë┬ö\é╔é╚éΦé▄é╖üB
-
-
- é╗éΩé┼é═üAé▒é╠â{âbâNâXé╔æ╬ë₧é╖éΘâNâëâXé≡ì∞éΦé▄é╡éσéñüBâNâëâXû╝é═üAÄ└ìs
-
- è┬ï½é≡èiö[é╖éΘé▒é╞é⌐éτ Env é╞é╡é▄é╡é╜üB
-
-
- List 33 : Ä└ìsè┬ï½é╠ÆΦï`
-
- 1 (defclass Env ()
- 2 (goal ; âSü[âïÉ▀
- 3 rule-list ; ÅqîΩé╔ÆΦï`é│éΩé─éóéΘÉ▀
- 4 exec-rule ; Ä└ìsÆåé╠É▀
- 5 exec-env ; ì∞ɼé╡é╜è┬ï½üiâXâ^âbâNé╔é╚éΘüj
- 6 binding)) ; æ⌐ö¢é╡é╜ò╧Éö
-
-
- goal é═Ä└ìsé╖éΘÉ▀é¬ôⁿéΦé▄é╖üBé▒éΩé╞â}âbâ`âôâOé╖éΘÉ▀é≡ rule-list é⌐éτÆT
-
- é╡é▄é╖üBrule-list é═ Env âCâôâXâ^âôâXé≡ì∞ɼé╖éΘÄ₧é╔üAÅqîΩé╠æ«É½âèâXâgé⌐
-
- éτÉ▀é≡ĵéΦÅoé╡é─âZâbâgé╡é▄é╖üBexec-rule é═üAî╗ì▌Ä└ìsÆåé╠É▀é≡âZâbâgé╡é▄é╖üB
-
- rule-list é┼â}âbâ`âôâOé╡é╜É▀é═üAé╗é▒é⌐éτĵéΦÅoé╡é─ exec-ruleé╔âZâbâgé╡é▄
-
- é╖üBé▒éΩé┼üAâoâbâNâgâëâbâNé╡é╜ÅΩìçé┼éαüAô»é╢É▀é¬ì─é╤ÄgéφéΩéΘé▒é╞é═éáéΦé▄
-
- é╣é±üB
-
- exec-env é═üAïKæÑé╠æ╠òöé≡Ä└ìsé╖éΘé╜é▀é╔ì∞ɼé╡é╜è┬ï½ Env é╠âCâôâXâ^âôâX
-
- é≡âèâXâgé╔èiö[é╡é▄é╖üBé╡é╜é¬é┴é─üAè┬ï½ Env é╠âCâôâXâ^âôâXé═üuû╪ì\æóüvé╔
-
- é╚éΘéφé»é┼é╖üBé┬é▄éΦüAâGâLâXâpü[âgâVâXâeâÇé¬ô«ì∞é╖éΘé▒é╞é╔éµéΦüAEnv âCâô
-
- âXâ^âôâXé╠û╪ì\æóé¬É╢ɼé│éΩüAì─ÄÄìsé╠Ä₧é╔é═üAì∞éτéΩé╜û╪ì\æóé≡é╜é╟éΘé▒é╞é┼
-
- ô«ì∞é╖éΘéφé»é┼é╖üBexec-env é═âXâ^âbâNé╞é╡é─ô«ì∞é│é╣éΘé╠é┼üAè┬ï½é═Ä└ìsé╡
-
- é╜Åçö╘é╞é═ïté╔èiö[é│éΩé─éóé½é▄é╖üBé╡é╜é¬é┴é─üAì─ÄÄìsé╠Ä₧é╔é═ exec-env é╠
-
- æµ 1 ùvæfé¬üAé╗é╠É▀é┼ì┼îπé╔Ä└ìsé│éΩé╜è┬ï½é╞é╚éΦé▄é╖üB
-
- binding é╔é═æ⌐ö¢é╡é╜ò╧Éöé≡èiö[é╡é▄é╖üBì─ÄÄìsé╠Ä₧é╔üAò╧Éöæ⌐ö¢é≡âNâèâAé╖
-
- éΘé╜é▀é╔Ägéóé▄é╖üB
-
- Ä└ì█é╔é╟é╠éµéñé╚ô«ì∞é╔é╚éΘé⌐üAăé╠ÄûÄ└é╞ïKæÑé≡Ägé┴é─Éαû╛é╡é▄é╡éσéñüB
-
-
- ÄûÄ└éPüF((foo a)), ((foo b))
-
- ÄûÄ└éQüF((bar a)), ((bar b))
-
- ïKæÑ üF((foo1 X Y) (foo X) (bar Y))
-
-
- é▄é╕üAÄ┐ûΓé╞é╡é─ (foo1 A B) é¬ù^éªéτéΩéΘé╞üAé╗éΩé≡ë≡é¡é╜é▀é╔ Env0 é¬ì∞ɼ
-
- é│éΩé▄é╖üB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : ( ((foo1 X Y) (foo X) (bar Y)) )
- exec-rule : nil
- exec-env : nil
- binding : nil
-
-
- goal é╔é═Ä┐ûΓ (foo1 A B) é¬âZâbâgé│éΩüAfoo1 é╠æ«É½âèâXâgé⌐éτæ«É½ RULE
-
- é╔èiö[é│éΩé─éóéΘÉ▀é¬âZâbâgé│éΩé▄é╖üBăé╔üAgoal é╞â}âbâ`âôâOé╖éΘÉ▀é≡ rule
-
- -list é╠Æåé⌐éτÆTé╡é▄é╖üBé▒é╠ÅΩìçüAÉ▀é═êΩé┬é╡é⌐é╚éóé┼é╖é¬üAé╗éΩé¬â}âbâ`âô
-
- âOé╡é▄é╖üBEnv0 é═ăé╠éµéñé╔é╚éΦé▄é╖üB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y))
- exec-env : nil
- binding : (A B) ; A = X, B = Y
-
-
- â}âbâ`âôâOé╡é╜É▀é═ exec-rule é╔âZâbâgé│éΩüArule-list é⌐éτìφÅ£é│éΩé▄é╖üB
-
- é╗é╡é─üAæ⌐ö¢é╡é╜ò╧Éö A é╞ B é≡ binding é╔âZâbâgé╡é▄é╖üBé▒é▒é┼üAò╧Éö A é╞
-
- X, B é╞ Y é╠âèâôâPü[âWé¬âZâbâgé│éΩé▄é╖üB
-
-
- ăé╔üAïKæÑé╠æ╠òöé≡Ä└ìsé╡é▄é╖üBé▄é╕üA(foo x) é≡Ä└ìsé╖éΘé╜é▀ÉVé╡éóè┬ï½
-
- Env1 é≡ì∞éΦ exec-env é╔âZâbâgé╡é▄é╖üB
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y))
- exec-env : (Env1)
- binding : (A B) ; A = X, B = Y
-
- Env1
- goal : (foo X) : (foo X)
- rule-list : ( ((foo a)) ((foo b)) ) : ( ((foo b) )
- exec-rule : nil => : ((foo a))
- exec-env : nil : nil
- binding : nil : (X) ; X = a
-
-
- Env1 é═ (foo X) é¬ goal é╚é╠é┼üAÅqîΩ foo é⌐éτÉ▀é≡ĵéΦÅoé╡é─ rule-list é╔
-
- âZâbâgé╡é▄é╖üBîπé═üAé▒é╠Æåé⌐éτ goal é╞â}âbâ`âôâOé╖éΘÉ▀é≡ÆTé╡é▄é╖üBé╗é╠îï
-
- ë╩üA((foo a)) é¬ exec-rule é╔âZâbâgé│éΩüAX é═ a é╔æ⌐ö¢é│éΩé▄é╖üBé▒é╠ÅΩìçüA
-
- æ╠òöé¬é╚éóé╠é┼ (foo X) é═â}âbâ`âôâOɼî≈é╞é╚éΦé▄é╖üB
-
- Env1 é¬É¼î≈é╡é╜é╠é┼ Env0 é╔û▀éΦüAăé╠ (bar Y) é≡Ä└ìsé╡é▄é╖üBé▒é▒é┼éαè┬
-
- ï½ Env2 é≡ì∞éΦ exec-env é╔Æ╟ë┴é╡é▄é╖üB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y))
- exec-env : (Env2 Env1)
- binding : (A B) ; A = X, B = Y
-
- Env2
- goal : (bar Y) : (bar Y)
- rule-list : ( ((bar a)) ((bar b)) ) : ( ((bar b)) )
- exec-rule : nil => : ((bar a))
- exec-env : nil : nil
- binding : nil : (Y) ; Y = a
-
-
- Env2 é╠ô«ì∞é═ Env1 é╞ô»é╢é┼é╖üBé╗é╠îïë╩üA(bar Y) é╠â}âbâ`âôâOé═ɼî≈é╡üAY
-
- é═ a é╔æ⌐ö¢é│éΩé▄é╖üBé╗é╠îπ Env0 é╔û▀éΦé▄é╖é¬üAé▒é╠îπé╔Ä└ìsé╖éΘæ╠òöé═éá
-
- éΦé▄é╣é±é╠é┼üAé▒é╠ïKæÑé═â}âbâ`âôâOɼî≈é╞é╚éΦé▄é╖üBé╡é╜é¬é┴é─üA
-
-
- A = a
- B = a ->
-
-
- é╞éóéñîïë╩é¬ô╛éτéΩé▄é╖üBé▒éΩé≡ Box é┼ò\é╖é╞ăé╠éµéñé╔é╚éΦé▄é╖üB
-
-
- Env0
- Call ü¿äíäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäóü¿ Exit
- äá(foo1 X Y) (foo X) (bar Y)äá
- äñäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäú
- äáCall ü¬ Exit
- Env1ü½ Env2äá
- äíäƒäƒäƒäƒäóü¿ Exit Call ü¿äíäƒäƒäƒäƒäó
- äá(foo a) äá äá(bar a) äá
- äñäƒäƒäƒäƒäú äñäƒäƒäƒäƒäú
-
- É} 17 : (foo1 X Y)é╠Ä└ìsüiéPüj
-
-
- âvâìâOâëâÇé╠Ä└ìsé¬Éié▐é╔é┬éΩüAâ{âbâNâXé¬É╢ɼé│éΩé─éóé¡é▒é╞é¬éφé⌐éΘé╞Äv
-
- éóé▄é╖üB
-
- ăé╔üAì─ÄÄìsé╖éΘùlÄqé≡î⌐é─é▌é▄é╡éσéñüBé▄é╕ exec-env é≡é╜é╟éΦüAì┼îπé╔Ä└
-
- ìsé╡é╜è┬ï½é╔ê┌ô«é╡é▄é╖üB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y))
- exec-env : (Env2 Env1)
- binding : (A B) ; A = X, B = Y
-
-
- Env0 é╠ exec-env é⌐éτ Env2 é╓ê┌ô«é╡é▄é╖üBexec-env é═âXâ^âbâNé╞ô»é╢ô«ì∞é╚
-
- é╠é┼üAɵô¬é╔éáéΘè┬ï½é¬ì┼îπé╔Ä└ìsé╡é╜è┬ï½é╞é╚éΦé▄é╖üB
-
-
- Env2
- goal : (bar Y)
- rule-list : ( ((bar b)) ) : nil
- exec-rule : ((bar a)) => : ((bar b))
- exec-env : nil : nil
- binding : (Y) : (Y) ; Y = b
-
-
- Env2 é╠ exec-env é═ nil é╚é╠é┼üAé▒éΩê╚Åπé╜é╟éΘé╫é½è┬ï½é═éáéΦé▄é╣é±üBé╗é▒
-
- é┼üAò╧Éöæ⌐ö¢é≡âNâèâAé╡é─üAgoal é╞â}âbâ`âôâOé╖éΘÉ▀é≡ rule-list é⌐éτÆTé╡é▄
-
- é╖üBé╖éΘé╞üA((bar b)) é╞â}âbâ`âôâOé¬É¼î≈é╡üAY é═ b é╔æ⌐ö¢é│éΩé▄é╖üB
-
- Env2 é¬â}âbâ`âôâOɼî≈é╡é╜é╠é┼ Env0 é╔û▀éΦüAé▒é╠îïë╩ Env0 éαâ}âbâ`âôâO
-
- ɼî≈é╞é╚éΦé▄é╖üBé╗é╠îïë╩üA
-
-
- A = a
- B = b ->
-
-
- é╞ò\Īé│éΩé▄é╖üBé▒éΩé≡ Box âéâfâïé┼ò\é╖é╞üAăé╠éµéñé╔é╚éΦé▄é╖üB
-
-
- Env0
- äíäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäóü¿ Exit
- äá(foo1 X Y) (foo X) (bar Y)äá
- äñäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäúü⌐ Redo
- Exitü¬ äá
- Env1 Env2äá ü½Redo
- äíäƒäƒäƒäƒäó äíäƒäƒäƒäƒäó
- äá(foo a) äá äá(bar b) äá
- äñäƒäƒäƒäƒäú äñäƒäƒäƒäƒäú
- ò╩ë≡ÆTì⌡
-
- É} 18 : (foo1 X Y)é╠Ä└ìsüiéQüj
-
-
- é▒é╠ÅΩìçé═ Env2 é┼ò╩ë≡é≡î⌐é┬é»éΘé▒é╞é¬é┼é½é▄é╡é╜üBé╗éΩé┼é═üAéαéñêΩôxì─
-
- ÄÄìsé╡é▄é╖üBé▒é╠ÅΩìçéαɵé┘é╟é╞ô»ùlé╔üAEnv0 é⌐éτì─ÄÄìsé╡é▄é╖üB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y))
- exec-env : (Env2 Env1)
- binding : (A B) ; A = X, B = Y
-
- Env2
- goal : (bar Y)
- rule-list : nil
- exec-rule : ((bar b)) => Ä╕ösüI
- exec-env : nil
- binding : (Y)
-
-
- Env2 é╠ exec-env é═ nil é╚é╠é┼üAé▒éΩê╚Åπé╜é╟éΘé╫é½è┬ï½é═éáéΦé▄é╣é±üBé╗é▒
-
- é┼üAò╧Éöæ⌐ö¢é≡âNâèâAé╡é─üAgoal é╞â}âbâ`âôâOé╖éΘÉ▀é≡ rule-list é⌐éτÆTé╡é▄
-
- é╖üBé╞é▒éδé¬üArule-list é═ï≤âèâXâg nil é╚é╠é┼ÆTì⌡é╖éΘÉ▀é═éáéΦé▄é╣é±üB
-
- Env2 é═Ä╕ösé╡é▄é╖üBé╗é▒é┼ Env0 é╔û▀éΦé▄é╖üB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y))
- exec-env : (Env1)
- binding : (A B) ; A = X, B = Y
-
-
- Env0 é┼é═ exex-env é⌐éτÄ╕ösé╡é╜ Env2 é≡ìφÅ£é╡üAÄcé┴é─éóéΘè┬ï½ Env1 é╔ê┌
-
- ô«é╡é▄é╖üBé▒éΩé≡ Box âéâfâïé┼ò\é╖é╞üAăé╠éµéñé╔é╚éΦé▄é╖üB
-
-
- Env0
- äíäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäóü¿ Exit
- äá(foo1 X Y) (foo X) (bar Y)äá
- äñäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäúü⌐ Redo
- äá
- Env1 Env2 ü½Redo
- äíäƒäƒäƒäƒäó äíäƒäƒäƒäƒäó
- äá(foo a) äá äá(bar Y) äá
- äñäƒäƒäƒäƒäúü⌐ Redo Fail ü⌐äñäƒäƒäƒäƒäú
- ò╩ë≡û│é╡ => Box é═Å┴û┼
-
- É} 19 : (foo1 X Y)é╠Ä└ìsüiéRüEéPüj
-
-
- Ä╕ösé╡é╜ Box é═Å┴û┼é╡é─âoâbâNâgâëâbâNé╖éΘéφé»é┼é╖üBé┼é═üAæ▒é½é╠ùlÄqé≡î⌐
-
- é─é▌é▄é╖üB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y))
- exec-env : (Env1)
- binding : (A B) ; A = X, B = Y
-
- Env1
- goal : (foo X) : (foo X)
- rule-list : ( ((foo b)) ) : nil
- exec-rule : ((foo a)) => : ((foo b))
- exec-env : nil : nil
- binding : (X) : (X) ; X = b
-
-
- Env1 é╠ exec-env é═ nil é╚é╠é┼üAé▒éΩê╚Åπé╜é╟éΘé╫é½è┬ï½é═éáéΦé▄é╣é±üBé╗é▒
-
- é┼üAò╧Éöæ⌐ö¢é≡âNâèâAé╡é─üAgoal é╞â}âbâ`âôâOé╖éΘÉ▀é≡ rule-list é⌐éτÆTé╡é▄
-
- é╖üBé╖éΘé╞üA((foo b)) é╞â}âbâ`âôâOé¬É¼î≈é╡üAX é═ b é╔æ⌐ö¢é│éΩé▄é╖üB
-
- Env1 é¬â}âbâ`âôâOɼî≈é╡é╜é╠é┼ Env0 é╔û▀éΦüAăé╠æ╠òö (bar Y) é≡Ä└ìsé╡é▄
-
- é╖üBé▒é╠ÅΩìçüAè┬ï½ Env2 é≡ÉVé╡é¡ì∞éΘé▒é╞é╔Æìê╙é╡é─é¡é╛é│éóüB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y))
- exec-env : (Env2 Env1)
- binding : (A B) ; A = X, B = Y
-
- Env2
- goal : (bar Y) : (bar Y)
- rule-list : ( ((bar a)) ((bar b)) ) : ( ((bar b)) )
- exec-rule : nil => : ((bar a))
- exec-env : nil : nil
- binding : nil : (Y) ; Y = a
-
-
- Env2 é═ÉVé╡é¡ì∞éτéΩéΘè┬ï½é╚é╠é┼üArule-list é╔é═ÅqîΩ foo é╠æ«É½âèâXâgé⌐éτ
-
- É▀é¬âZâbâgé│éΩé▄é╖üBê╚æOÄ└ìsé╡é╜è┬ï½é╞é═êßéñé▒é╞é╔Æìê╙é╡é─é¡é╛é│éóüBè┬ï½
-
- é═êßéóé▄é╖é¬üAô«ì∞é═ô»é╢é┼é╖üBBox âéâfâïé≡î⌐é─é¡é╛é│éóüB
-
-
- Env0
- äíäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäóü¿ Exit
- äá(foo1 X Y) (foo X) (bar Y)äá
- äñäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäú
- ü¬
- Env1 Env2 äá Exit
- äíäƒäƒäƒäƒäóü¿ Exit Call ü¿äíäƒäƒäƒäƒäó
- äá(foo b) äá äá(bar a) äá
- äñäƒäƒäƒäƒäú äñäƒäƒäƒäƒäú
- ò╩ë≡ÆTì⌡ ÉVé╡éó box é¬ì∞éτéΩéΘ
-
- É} 20 : (foo1 X Y)é╠Ä└ìsüiéRüEéQüj
-
-
- Env1 é¬É¼î≈é╡üAÉVé╡éó Box é┼éáéΘ Env2 é¬ì∞ɼé│éΩé▄é╖üBé╗é▒é┼üA(bar Y)
-
- é╠â}âbâ`âôâOé¬ìséφéΩüAé╗é╠îïë╩ Y é¬ a é╔æ⌐ö¢é│éΩé▄é╖üB
-
-
- A = b
- B = a ->
-
-
- é▒é▒é┼ì─ÄÄìsé╖éΘé╞üAEnv2 é┼ò╩ë≡é¬ïüé▀éτéΩüAăé╠éµéñé╚îïë╩é╞é╚éΦé▄é╖üB
-
-
- A = b
- B = b ->
-
-
- é▒é╠ÅΩìçé═üAEnv2 é╠ì─ÄÄìsé╛é»é┼é╖é╠é┼è╚ÆPé┼é╖é╦üBăé¬ì┼îπé╠ì─ÄÄìsé╔é╚éΦ
-
- é▄é╖üB
-
- Env2 é╠ rule-list é═ï≤é╚é╠é┼ì─ÄÄìsé═Ä╕ösé╡é▄é╖üBé╗é▒é┼üAEnv0 é╠ exec-env
-
- é⌐éτ Env2 é≡ìφÅ£é╡üAEnv1 é╓âoâbâNâgâëâbâNé╡é▄é╖üBé╡é⌐é╡üAEnv1 é╠ rule-list
-
- éαï≤é╚é╠é┼üAé▒é▒é┼éαì─ÄÄìsé╔Ä╕ösé╡é▄é╖üBé╗é╠îïë╩üAEnv0 é┼é═ Env1 é≡ exec-
-
- env é⌐éτìφÅ£é╡é▄é╖üBé╖éΘé╞üAexec-env é═ï≤âèâXâg nil é╔é╚éΘé╠é┼üAé▒éΩê╚Åπ
-
- âoâbâNâgâëâbâNé╖éΘè┬ï½é¬é╚é¡é╚éΦé▄é╖üB
-
-
- Env0
- goal : (foo1 A B)
- rule-list : nil
- exec-rule : ((foo1 X Y) (foo X) (bar Y)) => Ä╕ös
- exec-env : nil
- binding : (A B)
-
-
- é╗é▒é┼üAò╧Éöæ⌐ö¢é≡âNâèâAé╡é─üAgoal é╞â}âbâ`âôâOé╖éΘïKæÑé≡ rule-list é⌐éτ
-
- ÆTé╖é╠é┼é╖é¬üArule-list é═ï≤âèâXâg nil é┼é╖é╦üBé╗é╠îïë╩üAEnv0 é═â}âbâ`âô
-
- âOÄ╕ösé╞é╚éΘé╠é┼é╖üBé▒éΩé≡ Box âéâfâïé┼ò\é╖é╞üAăé╠éµéñé╔é╚éΦé▄é╖üB
-
-
- Env0
- äíäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäó
- äá(foo1 X Y) (foo X) (bar Y)äá
- Fail ü⌐äñäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäƒäúü⌐ Redo
- ü¬Fail äá
- Env1äá Env2 ü½Redo
- äíäƒäƒäƒäƒäó äíäƒäƒäƒäƒäó
- äá(foo X) äá äá(bar Y) äá
- äñäƒäƒäƒäƒäúü⌐ Redo Fail ü⌐äñäƒäƒäƒäƒäú
- ò╩ë≡û│é╡ => Box é═Å┴û┼ ò╩ë≡û│é╡ => Box é═Å┴û┼
-
- É} 21 : (foo1 X Y)é╠Ä└ìsüiéSüj
-
-
- ì─ÄÄìsé╡é▄é╡é╜é¬üAEnv2 é┼é═ò╩ë≡é¬î⌐é┬é⌐éτé╕üA Failé╞é╚éΦé▄é╡é╜üBăé╔
-
- Env1 é¬ì─ÄÄìsé│éΩé▄é╡é╜é¬üAé▒éΩéαò╩ë≡é¬î⌐é┬é⌐éτé╕üAFail é╞é╚éΦé▄é╡é╜üBì┼
-
- îπé╔ Env0 é╔û▀éΦé▄é╖é¬üAé▒éΩê╚Åπì─ÄÄìsé╖éΘÉ▀é¬é╚éóé╠é┼ Failé╞é╚éΘé╠é┼é╖üB
-
-
-
-
- üiédénéeüj
-